import {initState} from "./initState";
import {compileToFunction} from "./compile/index";
import {mountComponent} from "./lifecycle";

export function initMinix(Vue) {
    Vue.prototype._init = function (options) {
        let vm = this
        //   vm.$options = mergeOptions(Vue.options.options)
        vm.$options = options
        //初始化状态
        initState(vm)

        // 渲染模板
        if (vm.$options.el) {
            vm.$mount(vm.$options.el)
        }
    }
    Vue.prototype.$mount = function (el) {
        console.log("模板编译el:", el)

        let vm = this

        // 获取元素
        el = document.querySelector(el)
        vm.$el = el
        let options = vm.$options

        if (!options.render) { // 没有
            let template = options.template
            if (!template && el) {
                // 获取 html
                el = el.outerHTML
                console.log(el)   // <div id="app">hello,rollup</div>

                // 变成ast语法树
                let render = compileToFunction(el)
                console.log(render)

                // 1、将render函数 转成虚拟DOM
                options.render = render

                // 2.将虚拟DOM 转成真实DOM 放到页面上

            }
        }
        // 挂载组件
        mountComponent(vm, el)
    }
}

// ast 语法树


